介绍一下I/O System实现的一些细节。下面的介绍主要是以vxWorks下的I/O System为实例,对于unix下的I/O System,可能有一些差别,在阅读和理解时注意甄别。

文件和设备

在I/O System中,其实并不需要涉及到硬件设备。因为在vxWorks下(unix也一样),总是将硬件设备当做系统中的一个文件。当然,这样也常常容易混淆设备和文件的关系,尤其是在同时考虑I/O System和设备驱动的时候。例如,说道某个设备的时候,可能在I/O System下面是指某个设备对应的文件,而在讨论设备驱动的时候,就要实指某个硬件设备。

再次强调, I/O System操作的对象是文件。 在vxWorks下,将被I/O System操作的文件进行一个划分,有以下两种:

另外,按照被操作文件是否有buffer,又可以划分为basic和buffered两类。

I/O System和APP

I/O System为APP提供的接口函数有open(),creat(),read(),write(),ioctl(),close(),remove()这7个。其中,open(),creat(),remove()这3个函数在参数中使用filename(其实就是文件名的字符串)来指定一个文件,而其它函数使用文件描述符fd来指定一个文件。有关文件描述符fd的相关内容,将在随后做详细说明。

其中,remove()函数在大部分驱动程序中都没有实现,表示删除一个文件。只有两类设备驱动需要实现该接口:

I/O System和设备驱动

说完了I/O System和APP的关联(接口函数),下面要考虑I/O System是如何和设备驱动程序联系在一起的呢?在vxWorks中,一共使用了3个数据结构(表)来关联I/O System和设备驱动,分别是:

本节主要介绍I/O System是如何实现应用程序(APP)和设备驱动程序之间的统一接口的。首先介绍I/O System和应用程序(APP)之间的接口,然后介绍I/O System和设备驱动之间的接口。其实,I/O System就是添加在APP和设备驱动之间的一个层。 Any problem in computer science can be solved by another layer of indirection.